package cn.edu.scau.common.utils;

import org.springframework.web.multipart.MultipartFile;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

/**
 * @description: 文件上传工具类
 * @author: yuxiang
 * @create: 2019-12-02 15:54
 **/
public class FileUtils {

    /**
     * @param file     文件
     * @param path     文件存放路径
     * @param fileName 原文件名
     * @return
     */
    public static boolean upload(MultipartFile file, String path, String fileName) {

        // 生成新的文件名
        String realPath = path + "/" + FileNameUtils.getFileName(fileName);

        //使用原文件名
        // String realPath = path + "/" + fileName;

        File dest = new File(realPath);

        //判断文件父目录是否存在
        if (!dest.getParentFile().exists()) {
            dest.getParentFile().mkdir();
        }

        try {
            //保存文件
            file.transferTo(dest);
            return true;
        } catch (IllegalStateException e) {
            e.printStackTrace();
            return false;
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }

    }

    /**
     * 获取文件值
     *
     * @param path
     * @return
     */
    public static Map getFileContent(String path) throws Exception {
        File file = new File(path);
        Map result = new HashMap();

        BufferedReader br = new BufferedReader(new FileReader(file));//构造一个BufferedReader类来读取文件
        String s = null;
        while ((s = br.readLine()) != null) {//使用readLine方法，一次读一行
            String[] strs = s.trim().split(" ");
            if (strs.length > 2) {
                throw new Exception("分类配置文件错误");
            }
            result.put(strs[0], strs[1]);
        }
        br.close();
        return result;
    }

    /**
     * 获得分类名
     *
     * @param path 文件路径
     * @param type 文件英文分类
     * @return
     */
    public static String getTypeName(String path, String type) throws Exception {

        Map map = null;
        map = getFileContent(path);

        return (String) map.get(type);
    }
}
